//
//  View+Ext.swift
//  TTCOM-iOS
//
//  Created by Toj on 5/27/22.
//

import Foundation
import UIKit

public extension TTView {
    
    var st_viewController: UIViewController? {
        var responder: UIResponder? = self
        var vc: UIViewController?
        while let next = responder?.next {
            guard let viewController = next as? UIViewController else {
                responder = next
                continue
            }
            // 将找到的 view 相关联的控制器赋值给 viewController 变量
            vc = viewController
            break
        }
        
        return vc
    }
    
    var cm_priority: CGFloat {
        get { return layer.zPosition }
        set { layer.zPosition = newValue }
    }
    
    /**
     约束(不想变大约束)
     -  如果组件的此属性优先级比另一个组件此属性优先级高的话,
     -  那么这个组件就保持不变, 另一个可以在需要拉伸的时候拉伸.
     ```
     水平有 label1, label2,
     如果:
     -  label1 在左侧, label2 在右侧,
     -  label1 + label2 的内容不够填充父控件, 想必有一个会被拉伸,
     如果:
     -  label2 被拉伸, 但是功能是不让其拉伸,
     那么:
     lable2.属性值 > lable1.属性值
     lable1.属性值 = 100
     lable2.属性值 = 800
     lable2 不会被拉伸, lable1 会填充其余部分
     ```
     */
    func st_setContentHugging(
        priority: UILayoutPriority,
        axis: NSLayoutConstraint.Axis = .horizontal
    ) {
        setContentHuggingPriority(priority, for: axis)
    }
    
    /**
     内容抗压缩优先级
     -  值越大, 表示视图越难被压缩
     ```
     水平有 label1, label2,
     如果:
     -  label1 在左侧, label2 在右侧,
     -  label1 + label2 的内容超出父控件, 想必有一个会被压缩,
     如果:
     -  label2 被压缩, 但是功能是不让其压缩,
     那么:
     lable2.属性值 > lable1.属性值
     lable1.属性值 = 100
     lable2.属性值 = 800
     lable2 不会被压缩, lable1 多余部分会被压缩
     ```
     */
    func st_setContentCompressionResistance(
        priority: UILayoutPriority,
        axis: NSLayoutConstraint.Axis = .horizontal
    ) {
        setContentCompressionResistancePriority(priority, for: axis)
    }
    
    func st_setLayoutPriority(
        _ priority: Float,
        axis: NSLayoutConstraint.Axis = .horizontal
    ) {
        setContentHuggingPriority(UILayoutPriority(priority), for: .horizontal)
        setContentCompressionResistancePriority(UILayoutPriority(priority), for: .horizontal)
    }
}
